/**
 * Copyright (c) 2022 Beijing Jiaotong University
 * PhotLab is licensed under [Open Source License].
 * You can use this software according to the terms and conditions of the [Open Source License].
 * You may obtain a copy of [Open Source License] at: [https://open.source.license/]
 *
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 *
 * See the [Open Source License] for more details.
 *
 * Author: Qing'ao Zhang, Zhenjie Wei
 * Created: Mar. 15, 2023
 * Supported by: National Key Research and Development Program of China
 */

import EngineService from "./api/engine"
import LibraryService from "./api/library"
import GraphService from "./api/graph"
import ProjectService from "./api/project"
import RemoteService from "./api/remote"
import DeviceService from "./api/device"
import MainService from "./api/main"

export default class PhotClient {
    private _engineService: EngineService
    private _libraryService: LibraryService
    private _graphService: GraphService
    private _projectService: ProjectService
    private _remoteService: RemoteService
    private _deviceService: DeviceService
    private _mainService: MainService

    constructor(socket: [string, number]) {
        this._engineService = new EngineService(socket)
        this._libraryService = new LibraryService(socket)
        this._graphService = new GraphService(socket)
        this._projectService = new ProjectService(socket)
        this._remoteService = new RemoteService(socket)
        this._deviceService = new DeviceService(socket)
        this._mainService = new MainService(socket)
    }

    public get engineService(): EngineService {
        return this._engineService
    }

    public get libraryService(): LibraryService {
        return this._libraryService
    }

    public get graphService(): GraphService {
        return this._graphService
    }

    public get projectService(): ProjectService {
        return this._projectService
    }

    public get remoteService(): RemoteService {
        return this._remoteService
    }

    public get deviceService(): DeviceService {
        return this._deviceService
    }

    public get mainService(): MainService {
        return this._mainService
    }
}
